package com.xz.example;

import com.xz.example.builder.ActorBuilder;
import com.xz.example.director.ActorController;
import com.xz.example.model.Actor;
import com.xz.example.util.XMLUtil;

/**
 * @author 张志航     
 * @version V1.0.0
 * @projectName design_mode
 * @title     Client   
 * @package    com.xz.example  
 * @date   2019/11/27 18:38  
 * @explain
 */
public class Client {

    /**
     * 需求：
     *      某游戏软件公司要开发一款基于角色扮演的网络游戏，玩家可以在游戏中扮演虚拟世界的一个角色，随着游戏版本的升级将会不断地增加新的角色，
     *      分析发现游戏角色包性别、脸型等多个组成部分，不同的角色脸型、性别、发型、服饰等都会有所差异，例如：天使拥有美丽的外形和披肩长发，
     *      并穿着白裙，而恶魔则是光头，并穿一件刺眼的黑衣。无论哪种角色，他们的创建步骤大致相同，都是先创建其组成部分，然后装配成一个完整的角色，
     *      现试用创建者模式来实现游戏角色的创建。
     * 分析：
     *      角色类Actor==》需要包含类型type、性别sex、脸型face、服装costume、发型hairstytle；
     *      抽象的角色构造器ActorBuilder==》buildType，buildSex、buildFace，buildCostume，buildHairstytle抽象方法
     *      具体的实现类==》英雄HeroBuilder，天使AngelBuilder，恶魔DevilHuilder
     * @param args
     */
    public static void main(String[] args) {

        Object bean = XMLUtil.getBean();
        if (null != bean && bean instanceof ActorBuilder){
            ActorBuilder builder = (ActorBuilder) bean;
            ActorController controller = new ActorController();
            Actor actor = controller.construct(builder);
            System.out.println(actor.getType()+"的外观：");
            System.out.println("属性："+actor.getSex());
            System.out.println("面容："+actor.getFace());
            System.out.println("发型："+actor.getHairstyle());
            System.out.println("服饰："+actor.getCostume());
        }

    }

}
